package base.thread_demo.demo03;

public class Ticket implements Runnable {
    public static void main(String[] args) {
        Ticket t = new Ticket();//动车售票任务
        Ticket tt = new Ticket();//高铁售票任务

        //t1、t2窗口售卖动车票
        Thread t1 = new Thread(t,"动车票窗口1：");
        Thread t2 = new Thread(t,"动车票窗口2：");
        //t3、t4窗口售卖高铁车票
        Thread t3 = new Thread(tt,"高铁票窗口1：");
        Thread t4 = new Thread(tt,"高铁票窗口2：");
        t1.start();
        t2.start();
//		t3.start();
//		t4.start();
    }


    /*
     * 	设置num为static是可以解决卖票问题的，但是将来可能是有两种票需要卖，比如高铁和动车各100张票需要卖，
     * 	这样就有两个Ticket对象，而static的num不属于对象，要想让num属于Ticket对象，就得设置为非static。
     * 	让Ticket实现单例模式？也是不行的，单例内存中就一个Ticket对象，不能区分高铁票和动车票。那该如何解决呢？
     * 	答案就是实现Runnable接口。原理就是，通过Thread静态代理同一个Ticket对象
     */
    private int num=100;

    public void run() {
        while(true) {
            if(num>0) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println(Thread.currentThread().getName()+"....."+num--);// 存在线程安全问题
            }else {
                break;
            }
        }
    }
}
